#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
	if(argc != 4){
		cout << "parameter error! EMPTY_IMAGE IMAGE SAVE_NAME" << endl;
		return -1;
	}
	cv::Mat empty = cv::imread(argv[1]);
	cv::Mat img = cv::imread(argv[2]);
	cv::Mat img_copy = img.clone();
	cv::Mat dst;
	cv::medianBlur(empty,dst,3);
	cv::medianBlur(img,img,3);
	//cv::imshow("image",img);
	// img.convertTo(img,CV_32FC3);
	// dst.convertTo(dst,CV_32FC3);
	cv::Mat res = img - dst;

	cv::Mat mask = cv::Mat::zeros(img.size(),CV_8UC1);
	// for(int i = 0; i < img.rows; i++){
	// 	uchar* data_img = img.ptr<uchar>(i);
	// 	uchar* data_dst = dst.ptr<uchar>(i);
	// 	uchar* data_mask = mask.ptr<uchar>(i);
	// 	for(int j = 0; j < img.cols; j++){
	// 		if(abs(data_img[3*j] - data_dst[3*j]) > 10 
	// 			&& abs(data_img[3*j+1] - data_dst[3*j+1]) > 10
	// 			&& abs(data_img[3*j+2] - data_dst[3*j+2]) > 10)
	// 			data_mask[j] = 255;
	// 	}
	// }
	for(int i = 0; i < img.rows; i++){
		uchar* data = res.ptr<uchar>(i);
		uchar* data_mask = mask.ptr<uchar>(i);
		uchar* data_copy = img_copy.ptr<uchar>(i);
		for(int j = 0; j < img.cols; j++){
			if(data[3*j] > 0 || data[3*j+1] > 0 || data[3*j+2] > 0 /*|| 
				data_copy[3*j] > 100*/)
				data_mask[j] = 255;
		}
	}

	cv::Mat element = getStructuringElement(MORPH_CROSS, cv::Size(5,5)); 
    //Mat out;
    morphologyEx(mask, mask, MORPH_OPEN, element);
	//cv::imshow("mask",mask);
	cv::imwrite(std::string(argv[3]) + ".png",mask); 
	cv::waitKey();
	return 0;
}